// Copyright (c) 2021 Presto Labs Pte. Ltd.
// Author: hyuan

#pragma once

#include <string>

#include "coin2/exchange/gateio_futures/api_order/native_private_client.h"

namespace coin2::exchange::gateio_futures::api_order {

class GateioFuturesRestAsyncAsioSubscriber : public base::order::RestSubscriber {
 public:
  using RestParams = coin2::exchange::order::GateioFuturesRestParams;
  using RestClient = GateioFuturesNativePrivateClient;

 public:
  using RestSubscriber::RestSubscriber;

  auto rest_client() { return dynamic_cast<RestClient*>(rest_client_); }
  void QueryBalance(const std::string& currency);
  void QueryPosition(const std::string& currency);
  void QueryOpenOrders(const std::string& currency, const std::string& contract);
  void QueryHistOrders(const std::string& currency, const std::string& contract);
  void QueryHistTrades(const std::string& currency);
  void QueryTradingFee();
  void SubscribeAsync() override;
};

}  // namespace coin2::exchange::gateio_futures::api_order
